home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.31-14 / scripts / config < prev    next >
Encoding:
Text File  |  2009-09-09  |  2.6 KB  |  150 lines

  1. #!/bin/bash
  2. # Manipulate options in a .config file from the command line
  3.  
  4. usage() {
  5.     cat >&2 <<EOL
  6. Manipulate options in a .config file from the command line.
  7. Usage:
  8. config options command ...
  9. commands:
  10.     --enable|-e option   Enable option
  11.     --disable|-d option  Disable option
  12.     --module|-m option   Turn option into a module
  13.     --set-str option value
  14.                          Set option to "value"
  15.     --state|-s option    Print state of option (n,y,m,undef)
  16.  
  17.     --enable-after|-E beforeopt option
  18.                              Enable option directly after other option
  19.     --disable-after|-D beforeopt option
  20.                              Disable option directly after other option
  21.     --module-after|-M beforeopt option
  22.                              Turn option into module directly after other option
  23.  
  24.     commands can be repeated multiple times
  25.  
  26. options:
  27.     --file .config file to change (default .config)
  28.  
  29. config doesn't check the validity of the .config file. This is done at next
  30.  make time.
  31. EOL
  32.     exit 1
  33. }
  34.  
  35. checkarg() {
  36.     ARG="$1"
  37.     if [ "$ARG" = "" ] ; then
  38.         usage
  39.     fi
  40.     case "$ARG" in
  41.     CONFIG_*)
  42.         ARG="${ARG/CONFIG_/}"
  43.         ;;
  44.     esac
  45.     ARG="`echo $ARG | tr a-z A-Z`"
  46. }
  47.  
  48. set_var() {
  49.     local name=$1 new=$2 before=$3
  50.  
  51.     name_re="^($name=|# $name is not set)"
  52.     before_re="^($before=|# $before is not set)"
  53.     if test -n "$before" && grep -Eq "$before_re" "$FN"; then
  54.         sed -ri "/$before_re/a $new" "$FN"
  55.     elif grep -Eq "$name_re" "$FN"; then
  56.         sed -ri "s:$name_re.*:$new:" "$FN"
  57.     else
  58.         echo "$new" >>"$FN"
  59.     fi
  60. }
  61.  
  62. if [ "$1" = "--file" ]; then
  63.     FN="$2"
  64.     if [ "$FN" = "" ] ; then
  65.         usage
  66.     fi
  67.     shift 2
  68. else
  69.     FN=.config
  70. fi
  71.  
  72. if [ "$1" = "" ] ; then
  73.     usage
  74. fi
  75.  
  76. while [ "$1" != "" ] ; do
  77.     CMD="$1"
  78.     shift
  79.     case "$CMD" in
  80.     --refresh)
  81.         ;;
  82.     --*-after)
  83.         checkarg "$1"
  84.         A=$ARG
  85.         checkarg "$2"
  86.         B=$ARG
  87.         shift 2
  88.         ;;
  89.     --*)
  90.         checkarg "$1"
  91.         shift
  92.         ;;
  93.     esac
  94.     case "$CMD" in
  95.     --enable|-e)
  96.         set_var "CONFIG_$ARG" "CONFIG_$ARG=y"
  97.         ;;
  98.  
  99.     --disable|-d)
  100.         set_var "CONFIG_$ARG" "# CONFIG_$ARG is not set"
  101.         ;;
  102.  
  103.     --module|-m)
  104.         set_var "CONFIG_$ARG" "CONFIG_$ARG=m"
  105.         ;;
  106.  
  107.     --set-str)
  108.         set_var "CONFIG_$ARG" "CONFIG_$ARG=\"$1\""
  109.         shift
  110.         ;;
  111.  
  112.     --state|-s)
  113.         if grep -q "# CONFIG_$ARG is not set" $FN ; then
  114.             echo n
  115.         else
  116.             V="$(grep "^CONFIG_$ARG=" $FN)"
  117.             if [ $? != 0 ] ; then
  118.                 echo undef
  119.             else
  120.                 V="${V/CONFIG_$ARG=/}"
  121.                 V="${V/\"/}"
  122.                 echo "$V"
  123.             fi
  124.         fi
  125.         ;;
  126.  
  127.     --enable-after|-E)
  128.         set_var "CONFIG_$B" "CONFIG_$B=y" "CONFIG_$A"
  129.         ;;
  130.  
  131.     --disable-after|-D)
  132.         set_var "CONFIG_$B" "# CONFIG_$B is not set" "CONFIG_$A"
  133.         ;;
  134.  
  135.     --module-after|-M)
  136.         set_var "CONFIG_$B" "CONFIG_$B=m" "CONFIG_$A"
  137.         ;;
  138.  
  139.     # undocumented because it ignores --file (fixme)
  140.     --refresh)
  141.         yes "" | make oldconfig
  142.         ;;
  143.  
  144.     *)
  145.         usage
  146.         ;;
  147.     esac
  148. done
  149.  
  150.